Integrated circuits capable of performing the functions of a processing unit of a digital computer are known in the art. Such circuits, termed microprocessors, are now widely used in a variety of relatively low-cost data processing applications, such as stored program controlled telephone equipment, data terminals, electric appliance controls, and home computers. Normally, microprocessors are combined with other components, such as memory circuits and input/output circuits, to form microcomputers. Some of the more recently developed microprocessors and microcomputers are fabricated entirely on a single integrated circuit chip.
In general, a microprocessor is designed to execute a sequence of instructions called a program and includes means for fetching instructions from a program store, an instruction register for storing a current instruction being executed, a plurality of internal registers for storing operands, addresses, and intermediate data, and a control unit for decoding the current instruction and providing control signals to govern the execution of a processor operation specified by the current instruction. Since most processor operations involve the reading and/or writing of certain internal registers, the control unit provides register control signals for controlling such reading and writing operations when required for the execution of the current instruction.
Recent advances in integrated circuit technology in the areas known as very-large-scale-integration (VSLI) have made feasible the design of single-chip microprocessors and microcomputers having more complex architectures than was previously possible. For example, such advances have made possible microprocessor architectures having wider and more numerous internal buses, "pipeline" arrangements which allow the overlapping of fetch and execute operations, and wider and more numerous internal registers. However, such increases in the architectural complexity of microprocessors impinge upon both the testing of and the development of programs in such microprocessors.
In general, program development in a microprocessor becomes more difficult as the complexity of the microprocessor increases. In order to detect and diagnose program "bugs" efficiently, a programmer should monitor and analyze the contents of the internal registers of the microprocessor during program execution. As the complexity of the microprocessor increases, the number of internal registers to be monitored by the programmer also increase. Furthermore, in prior art microprocessors the available means for monitoring the contents of internal registers are inconvenient and some internal registers cannot be directly monitored at all.
Typically, the internal registers of a microprocessor fall into two categories, namely a user and a nonuser category. The user category includes those internal registers which can be directly accessed (i.e., read and/or written) through the execution of appropriate instructions, while the nonuser category includes those internal registers, such as the temporary data registers, temporary address registers, program counter and control latches, which cannot be directly accessed through instructions. Because in prior art microprocessors the only available means for observing the contents of internal registers is through the execution of appropriate instructions, only those registers in the user category are available for monitoring during program development, and such monitoring requires the insertion of appropriate additional instructions in predetermined locations in a program under development. Thus, microprocessors of the prior art have the problems of not permitting a programmer to directly observe the contents of registers in the nonuser category and inconveniently requires the programmer to alter the program under development by the insertion of additional instructions whenever monitoring of internal registers is desired at particular program locations. Therefore, from the standpoint of facilitating program development it would be advantageous to have a microprocessor architecture which would permit a programmer to monitor the contents of internal registers in both the user and nonuser categories without having to use program instructions for such monitoring.
Functional testing of a microprocessor also becomes more difficult as the complexity of the microprocessor increases. Because tests on an integrated circuit chip can only be made from the terminals (i.e., the bonding pads or package pins) of the chip, and because the internal conductors of the chip are, as a practical matter, not accessible for either the application of test signals or the observation of circuit responses, therefore, the individual functional components of a microprocessor, such as the control unit, the arithmetic unit, etc., cannot be tested independently but only as part of signal paths between input and output terminals. Consequently, not all of the potential logical faults in the various functional components are detectable using tests made only from the terminals of the chip. The number of undetectable logical faults tend to increase as the complexity of the microprocessor increases.
Functional testing of a digital integrated circuit chip is typically performed by applying a sequence of binary logic signals called test vectors to the input terminals of a chip being tested and by observing the response signals called output vectors at the output terminals of the chip. Logical faults in the chip are detected by comparing the observed output vectors with those which would be expected from a properly functioning chip, a disagreement in the comparison indicating the existence of one or more logical faults in the chip. Both the application of the test vectors and the comparison of the output vectors are typically performed by automatic test equipment.
A test vector sequence is normally designed to minimize the number of logical faults which are undetectable in a functional test while using the shortest possible sequence. The undetectable faults are undesirable since chips having such faults would pass the functional test. An excessively lengthy test vector sequence is also undesirable since such a sequence would require a long testing time and therefore lead to a high testing cost. A figure of merit for a test vector sequence, commonly referred to as the fault coverage, is the percentage of all potential logical faults of the chip being tested which are detectable in a functional test using that test vector sequence. In general, the maximum achievable fault coverage for a test vector sequence for functional testing of a prior art microprocessor is less than one hundred percent and decreases as the complexity of the microprocessor increases. Moreover, the length of a test vector sequence required to achieve maximum fault coverage increases as the complexity of the microprocessor being tested increases.
It is known that the maximum achievable fault coverage in the functional testing of a microprocessor can be increased and the length of the test vector sequence for achieving maximum fault coverage can be decreased by increasing the access to the internal circuit nodes of the microprocessor for the purpose of applying of test signals and of detecting circuit responses. Access to many of the internal circuit nodes of a microprocessor can be achieved by providing direct access to the internal registers of the microprocessor. However, to derive optimal testing benefits from such access, the means which are used to provide access to the internal registers must not themselves introduce a significant number of undetectable logical faults. Therefore, such means should be simple and should be largely independent of the other functional components of the microprocessor, particularly the control unit. Therefore, such means should not be under the control of microprocessor instruction.
In a copending United States patent application having Ser. No. 61,741, entitled "Microprocessor Architecture for Improved Chip Testability" and filed on July 30, 1979 in the name of M. Shoji, a co-inventor in the present application, it was disclosed that a substantial number of the undetectable logical faults in a microprocessor are situated in the control unit and that a significant improvement in the functional testing of a microprocessor can be achieved by making the control signals from the control unit directly observable at the terminals of the microprocessor chip. According to the Shoji application, observability of the control signals is achieved by providing the microprocessor with means for directly coupling the control lines of the microprocessor to its terminals. However, where the control unit of the microprocessor includes control latches for storing the control signals, observability of the control signals may also be achieved by providing means for directly reading the control latches.
In view of the above-discussed problems in functional testing and in program development, a need clearly exists for a microprocessor architecture which provides random access to the internal registers of the microprocessor including the control latches by independent means which are not under the control of instructions.